﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using CruzDelSur.Dominio;
using NHibernate;
using NHibernate.Criterion;
using Common.Logging;
using CruzDelSur.Models;

namespace CruzDelSur.Persistencia
{
    public class TramoDAO : BaseDAO<Tramo, string>, ITramoDAO
    {
        public ICollection<Tramo> ListarTramos()
        {
            using (ISession sesion = NHibernateHelper.AbrirSesion())
            {
                ICollection<Tramo> resultado = sesion
                    .CreateQuery("from Tramo where Estado <> :estado")
                    .SetParameter("estado", "T")
                    .List<Tramo>();
                return resultado;
            }
        }
        public ICollection<Tramo> ListarTramos2()
        {
            using (ISession sesion = NHibernateHelper.AbrirSesion())
            {
                ICollection<Tramo> resultado = sesion
                    .CreateSQLQuery("SELECT codTramo as Codigo, desTramo as Descripcion, codUbicacion as Origen, SE_TB_Ubicacion_codUbicacion as Destino, estTramo as Estado, codCreadoPor as UsuarioCreado, fecCreado as FechaCreacion, codModificadoPor as UsuarioModificado, fecModificado as FechaModificacion FROM SE_TB_Tramo")
                    .SetResultTransformer(new NHibernate.Transform.AliasToBeanResultTransformer(typeof(Tramo)))
                    .List<Tramo>();
                return resultado;
            }
        }

        public ICollection<Tramo> obtenerListadoPendientes()
        {
            ICollection<Tramo> resultado = this.Listar(
                DetachedCriteria.For<Tramo>().Add(
                    Restrictions.Eq("Estado", Servicio.PENDIENTE)
                   )
                );
            return resultado;
        }
        public ICollection<Tramo> ListarServicioTramos(string codServ)
        {
            using (ISession sesion = NHibernateHelper.AbrirSesion())
            {
                ICollection<Tramo> resultado = sesion
                    .CreateSQLQuery(
                    "SELECT DISTINCT t.codTramo as Codigo, t.desTramo as Descripcion " +
                    " FROM SE_TB_Tramo t" +
                    " inner  join SE_TB_Servicio_Tramo st ON t.codTramo = st.codTramo" +
                    " WHERE estTramo = :estado AND st.flaServicioTramo = :flg " +
                    " AND st.codServicio =:codSvr")
                    .SetParameter("codSvr", codServ)
                    .SetParameter("estado", "A")
                    .SetParameter("flg", true)
                    .SetResultTransformer(new NHibernate.Transform.AliasToBeanResultTransformer(typeof(Tramo)))
                    .List<Tramo>();
                return resultado;
            }
        }
    }
}